home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2002 November / SGI Freeware 2002 November - Disc 1.iso / dist / fw_ddd.idb / usr / freeware / info / ddd-themes.info-2.z / ddd-themes.info-2
Text File  |  2001-10-09  |  49KB  |  1,333 lines

  1. This is ddd-themes.info, produced by makeinfo version 4.0 from
  2. ddd-themes.texi.
  3.  
  4. INFO-DIR-SECTION Miscellaneous
  5. START-INFO-DIR-ENTRY
  6. * DDD-Themes: (ddd-themes).       Writing DDD Themes.
  7. END-INFO-DIR-ENTRY
  8.  
  9. DDD is a graphical front-end for GDB and other command-line debuggers.
  10.  
  11. This is the First Edition, 2001-02-01, of `Writing DDD themes' for DDD
  12. Version 3.3.1.
  13.  
  14. Copyright (C) 2001 UniversitΣt Passau
  15. Lehrstuhl fⁿr Software-Systeme
  16. Innstra▀e 33
  17. D-94032 Passau
  18. GERMANY
  19.  
  20. Distributed by
  21. Free Software Foundation, Inc.
  22. 59 Temple Place - Suite 330
  23. Boston, MA 02111-1307
  24. USA
  25.  
  26. DDD and this manual are available via the DDD WWW page
  27. (http://www.gnu.org/software/ddd/).
  28.  
  29.    Permission is granted to copy, distribute and/or modify this document
  30. under the terms of the GNU Free Documentation License, Version 1.1 or
  31. any later version published by the Free Software Foundation; with no
  32. Invariant Sections, no Front-Cover Texts and no Back-Cover Texts.  A
  33. copy of the license is included in the section entitled "GNU Free
  34. Documentation License".
  35.  
  36.    Send questions, comments, suggestions, etc. to <ddd@gnu.org>.
  37. Send bug reports to <bug-ddd@gnu.org>.
  38. 
  39. File: ddd-themes.info,  Node: Color Functions,  Next: Arc Functions,  Prev: Font Functions,  Up: VSL Library
  40.  
  41. Color Functions
  42. ===============
  43.  
  44.    The functions in this section require inclusion of the library
  45. `colors.vsl'.
  46.  
  47.    For themes, `colors.vsl' need not be included explicitly.
  48.  
  49.  - VSL Function: color (box, foreground [, background]])
  50.      Returns BOX, where the foreground color will be drawn using the
  51.      FOREGROUND color.  If BACKGROUND is specified as well, it will be
  52.      used for drawing the background.  Both FOREGROUND and BACKGROUND
  53.      are strings specifying a valid X11 color.
  54.  
  55. 
  56. File: ddd-themes.info,  Node: Arc Functions,  Next: Slope Functions,  Prev: Color Functions,  Up: VSL Library
  57.  
  58. Arc Functions
  59. =============
  60.  
  61.    The functions in this section require inclusion of the library
  62. `arcs.vsl'.
  63.  
  64.    For themes, `arcs.vsl' _must_ be included explicitly, using a line
  65.      #include <arcs.vsl>
  66.    at the beginning of the theme.
  67.  
  68. * Menu:
  69.  
  70. * Arc Basics::
  71. * Custom Arc Functions::
  72.  
  73. 
  74. File: ddd-themes.info,  Node: Arc Basics,  Next: Custom Arc Functions,  Up: Arc Functions
  75.  
  76. Arc Basics
  77. ----------
  78.  
  79.  - VSL Function: arc (start, length [, thickness])
  80.      Returns a stretchable box with an arc of LENGTH, starting at angle
  81.      START.  START and LENGTH must be multiples of 90 (degrees).  The
  82.      angle of START is specified clockwise relative to the 9 o'clock
  83.      position.  THICKNESS defaults to `arcthickness()' (see below).
  84.  
  85.  - VSL Function: arcthickness ()
  86.      Default width of arcs.  Defaults to `rulethickness()'.
  87.  
  88. 
  89. File: ddd-themes.info,  Node: Custom Arc Functions,  Prev: Arc Basics,  Up: Arc Functions
  90.  
  91. Custom Arc Functions
  92. --------------------
  93.  
  94.  - VSL Function: oval (box)
  95.      Returns an oval containing BOX.  Example: `oval("33")'.
  96.  
  97.  - VSL Function: ellipse (box)
  98.  - VSL Function: ellipse ()
  99.      Returns an ellipse containing BOX.  Example: `ellipse("START")'.
  100.      If BOX is omitted, the ellipse is stretchable and expands to the
  101.      available space.
  102.  
  103.  - VSL Function: circle (box)
  104.      Returns a circle containing BOX.  Example: `circle(10)'.
  105.  
  106. 
  107. File: ddd-themes.info,  Node: Slope Functions,  Prev: Arc Functions,  Up: VSL Library
  108.  
  109. Slope Functions
  110. ===============
  111.  
  112.    The functions in this section require inclusion of the library
  113. `slopes.vsl'.
  114.  
  115.    For themes, `slopes.vsl' _must_ be included explicitly, using a line
  116.      #include <slopes.vsl>
  117.    at the beginning of the theme.
  118.  
  119. * Menu:
  120.  
  121. * Slope Basics::
  122. * Arrow Functions::
  123. * Custom Slope Functions::
  124.  
  125. 
  126. File: ddd-themes.info,  Node: Slope Basics,  Next: Arrow Functions,  Up: Slope Functions
  127.  
  128. Slope Basics
  129. ------------
  130.  
  131.  - VSL Function: rise ([thickness])
  132.      Create a stretchable box with a line from the lower left to the
  133.      upper right corner.  THICKNESS defaults to `slopethickness()' (see
  134.      below).
  135.  
  136.  - VSL Function: fall ([thickness])
  137.      Create a stretchable box with a line from the upper left to the
  138.      lower right corner.  THICKNESS defaults to `slopethickness()' (see
  139.      below).
  140.  
  141.  - VSL Function: slopethickness ()
  142.      Default thickness of slopes.  Defaults to `rulethickness()'.
  143.  
  144. 
  145. File: ddd-themes.info,  Node: Arrow Functions,  Next: Custom Slope Functions,  Prev: Slope Basics,  Up: Slope Functions
  146.  
  147. Arrow Functions
  148. ---------------
  149.  
  150.  - VSL Function: n_arrow ()
  151.  - VSL Function: w_arrow ()
  152.  - VSL Function: s_arrow ()
  153.  - VSL Function: e_arrow ()
  154.      Returns a box with an arrow pointing to the upper, left, lower, or
  155.      right side, respectively.
  156.  
  157.  - VSL Function: nw_arrow ()
  158.  - VSL Function: ne_arrow ()
  159.  - VSL Function: sw_arrow ()
  160.  - VSL Function: se_arrow ()
  161.      Returns a box with an arrow pointing to the upper left, upper
  162.      right, lower left, or lower right side, respectively.
  163.  
  164. 
  165. File: ddd-themes.info,  Node: Custom Slope Functions,  Prev: Arrow Functions,  Up: Slope Functions
  166.  
  167. Custom Slope Functions
  168. ----------------------
  169.  
  170.  - VSL Function: punchcard (box)
  171.      Returns a punchcard containing BOX.
  172.  
  173.  - VSL Function: rhomb (box)
  174.      Returns a rhomb containing BOX.
  175.  
  176.  - VSL Function: octogon (box)
  177.      Returns an octogon containing BOX.
  178.  
  179. 
  180. File: ddd-themes.info,  Node: VSL Reference,  Next: Documentation License,  Prev: VSL Library,  Up: Top
  181.  
  182. VSL Reference
  183. *************
  184.  
  185.    This appendix describes the VSL language.
  186.  
  187. * Menu:
  188.  
  189. * VSL Boxes::
  190. * VSL Lists::
  191. * VSL Expressions::
  192. * VSL Function Calls::
  193. * VSL Constant Definitions::
  194. * VSL Function Definitions::
  195. * VSL Includes::
  196. * VSL Operators::
  197. * VSL Syntax Summary::
  198.  
  199. 
  200. File: ddd-themes.info,  Node: VSL Boxes,  Next: VSL Lists,  Up: VSL Reference
  201.  
  202. Boxes
  203. =====
  204.  
  205.    VSL knows two data types.  The most common data type is the _box_.
  206. A box is a rectangular area with a _content_, a _size_, and a
  207. _stretchability_.
  208.  
  209.    Boxes are either _atomic_ or _composite_.  A composite box is built
  210. from two or more other boxes.  These boxes can be aligned horizontally,
  211. vertically, or otherwise.
  212.  
  213.    Boxes have a specific minimum _size_, depending on their content.
  214. We say `minimum' size here, because some boxes are _stretchable_--that
  215. is, they can fill up the available space.
  216.  
  217.    If you have a vertical alignment of three boxes A, B, and C, like
  218. this:
  219.      AAAAAA
  220.      AAAAAA
  221.        B
  222.        B
  223.      CCCCCC
  224.      CCCCCC
  225.    and B is stretchable horizontally, then B will fill up the available
  226. horizontal space:
  227.      AAAAAA
  228.      AAAAAA
  229.      BBBBBB
  230.      BBBBBB
  231.      CCCCCC
  232.      CCCCCC
  233.  
  234.    If two or more boxes compete for the same space, the space will be
  235. distributed in proportion to their stretchability.
  236.  
  237.    An atomic stretchable box has a stretchability of 1.  An alignment of
  238. multiple boxes stretchable in the direction of the alignment boxes will
  239. have a stretchability which is the sum of all stretchabilities.
  240.  
  241.    If you have a vertical alignment of three boxes A, B, C, D, and E,
  242. like this:
  243.      AAAAAA
  244.      AAAAAA
  245.      BC   D
  246.      BC   D
  247.      EEEEEE
  248.      EEEEEE
  249.    and B, C, and D are stretchable horizontally (with a stretchability
  250. of 1), then the horizontal alignment of B and C will have a
  251. stretchability of 2.  Thus, the alignment of B and C gets two thirds of
  252. the available space; D gets the remaining third.
  253.      AAAAAA
  254.      AAAAAA
  255.      BBCCDD
  256.      BBCCDD
  257.      EEEEEE
  258.      EEEEEE
  259.  
  260. 
  261. File: ddd-themes.info,  Node: VSL Lists,  Next: VSL Expressions,  Prev: VSL Boxes,  Up: VSL Reference
  262.  
  263. Lists
  264. =====
  265.  
  266.    Besides boxes, VSL knows _lists_.  A list is not a box--it has no
  267. size or stretchability.  A list is a simple means to structure data.
  268.  
  269.    VSL lists are very much like lists in functional languages like Lisp
  270. or Scheme.  They consist of a head (typically a list element) and a tail
  271. (which is either a list remainder or the empty list).
  272.  
  273. 
  274. File: ddd-themes.info,  Node: VSL Expressions,  Next: VSL Function Calls,  Prev: VSL Lists,  Up: VSL Reference
  275.  
  276. Expressions
  277. ===========
  278.  
  279. * Menu:
  280.  
  281. * VSL String Literals::
  282. * VSL Number Literals::
  283. * VSL List Literals::
  284. * VSL Conditionals::
  285. * VSL Boolean Operators::
  286. * VSL Local Variables::
  287. * VSL Let Patterns::
  288.  
  289. 
  290. File: ddd-themes.info,  Node: VSL String Literals,  Next: VSL Number Literals,  Up: VSL Expressions
  291.  
  292. String Literals
  293. ---------------
  294.  
  295.    The expression `"TEXT"' returns a box containing TEXT.  TEXT is
  296. parsed according to C syntax rules.
  297.  
  298.    Multiple string expressions may follow each other to form a larger
  299. constant, as in C++.  `"TEXT1" "TEXT2"' is equivalent to `"TEXT1TEXT2"'
  300.  
  301.    Strings are not stretchable.
  302.  
  303. 
  304. File: ddd-themes.info,  Node: VSL Number Literals,  Next: VSL List Literals,  Prev: VSL String Literals,  Up: VSL Expressions
  305.  
  306. Number Literals
  307. ---------------
  308.  
  309.    Any constant integer N evaluates to a _number_--that is, a
  310. non-stretchable empty square box with size (N, N).
  311.  
  312. 
  313. File: ddd-themes.info,  Node: VSL List Literals,  Next: VSL Conditionals,  Prev: VSL Number Literals,  Up: VSL Expressions
  314.  
  315. List Literals
  316. -------------
  317.  
  318.    The expression `[A, B, ...]' evaluates to a _list_ containing the
  319. element A, B, ....  `[]' is the empty list.
  320.  
  321.    The expression `[HEAD : TAIL]' evaluates to a list whose first
  322. element is HEAD and whose remainder (typically a list) is TAIL.
  323.  
  324.    In most contexts, round parentheses can be used as alternatives to
  325. square brackets.  Thus, `(A, B)' is a list with two elements, and `()'
  326. is the empty list.
  327.  
  328.    Within an expression, though, square parentheses must be used to
  329. create a list with one element.  In an expression, the form `(A)' is
  330. not a list, but an alternative notation for A.
  331.  
  332. 
  333. File: ddd-themes.info,  Node: VSL Conditionals,  Next: VSL Boolean Operators,  Prev: VSL List Literals,  Up: VSL Expressions
  334.  
  335. Conditionals
  336. ------------
  337.  
  338.    A box A = (A1, A2) is called _true_ if A1 or A2 is non-zero.  It is
  339. called _false_ if both A1 or A2 are zero.
  340.  
  341.    The special form
  342.      if A then B else C fi
  343.    returns B if A is true, and C otherwise.  Only one of B or C is
  344. evaluated.
  345.  
  346.    The special form
  347.      elsif A2 then B2 else C fi
  348.    is equivalent to
  349.      else if A2 then B2 else C fi fi
  350.  
  351. 
  352. File: ddd-themes.info,  Node: VSL Boolean Operators,  Next: VSL Local Variables,  Prev: VSL Conditionals,  Up: VSL Expressions
  353.  
  354. Boolean Operators
  355. -----------------
  356.  
  357.    The special form
  358.      A and B
  359.    is equivalent to
  360.      if A then B else 0 fi
  361.  
  362.    The special form
  363.      A or B
  364.    is equivalent to
  365.      if A then 1 else B fi
  366.  
  367.    The special form
  368.      not A
  369.    is equivalent to
  370.      if A then 0 else 1 fi
  371.  
  372.    Actually, `not' is realized as a function; *Note Negation
  373. Functions::, for details.
  374.  
  375. 
  376. File: ddd-themes.info,  Node: VSL Local Variables,  Next: VSL Let Patterns,  Prev: VSL Boolean Operators,  Up: VSL Expressions
  377.  
  378. Local Variables
  379. ---------------
  380.  
  381.    You can introduce local variables using `let' and `where':
  382.  
  383.      let V1 = E1 in E
  384.    makes V1 available as replacement for E1 in the expression E.
  385.  
  386.    Example:
  387.      let pi = 3.1415 in 2 * pi => 6.2830
  388.  
  389.    The special form
  390.      let V1 = E1, V2 = E2, ... in E
  391.    is equivalent to
  392.      let V1 = E1 in let V2 = E2 in let ... in E
  393.  
  394.    As an alternative, you can also use the `where' form:
  395.  
  396.      E where V1 = E1
  397.    is equivalent to
  398.      let V1 = E1 in E
  399.  
  400.    Example:
  401.      ("here lies" | name) where
  402.          name = ("one whose name" | "was writ in water")
  403.  
  404.    The special form
  405.      E where V1 = E1, V2 = E2, ...
  406.    is equivalent to
  407.      let V1 = E1, V2 = E2, ... in E
  408.  
  409. 
  410. File: ddd-themes.info,  Node: VSL Let Patterns,  Prev: VSL Local Variables,  Up: VSL Expressions
  411.  
  412. Let Patterns
  413. ------------
  414.  
  415.    You can access the individual elements of a list or some composite
  416. box by giving an appropriate _pattern_:
  417.  
  418.      let (left, right) = pair in EXPR
  419.  
  420.    If `pair' has the value, say, `(3, 4)', then `left' will be
  421. available as a replacement for `3', and `right' will be available as a
  422. replacement for `4' in EXPR.
  423.  
  424.    A special pattern is available for accessing the head and the tail
  425. of a list:
  426.  
  427.      let [head : tail] = list in EXPR
  428.  
  429.    If `expr' has the value, say, `[3, 4, 5]', then `head' will be `3',
  430. and `tail' will be `[4, 5]' in EXPR.
  431.  
  432. 
  433. File: ddd-themes.info,  Node: VSL Function Calls,  Next: VSL Constant Definitions,  Prev: VSL Expressions,  Up: VSL Reference
  434.  
  435. Function Calls
  436. ==============
  437.  
  438.    A function call takes the form
  439.  
  440.      NAME LIST
  441.  
  442.    which invokes the (previously declared or defined) function with an
  443. argument of LIST.  Normally, LIST is a list literal (*note VSL List
  444. Literals::) written with round brackets.
  445.  
  446. 
  447. File: ddd-themes.info,  Node: VSL Constant Definitions,  Next: VSL Function Definitions,  Prev: VSL Function Calls,  Up: VSL Reference
  448.  
  449. Constant Definitions
  450. ====================
  451.  
  452.    A VSL file consists of a list of _definitions_.
  453.  
  454.    A constant definition takes the form
  455.  
  456.      NAME = EXPRESSION;
  457.  
  458.    Any later definitions can use NAME as a replacement for EXPRESSION.
  459.  
  460.    Example:
  461.      true = 1;
  462.      false = 0;
  463.  
  464. 
  465. File: ddd-themes.info,  Node: VSL Function Definitions,  Next: VSL Includes,  Prev: VSL Constant Definitions,  Up: VSL Reference
  466.  
  467. Function Definitions
  468. ====================
  469.  
  470.    In VSL, all functions either map a _list_ to a _box_ or a _list_ to
  471. a _list_.  A function definition takes the form
  472.  
  473.      NAME LIST = EXPRESSION;
  474.  
  475.    where LIST is a list literal (*note VSL List Literals::).
  476.  
  477.    The list literal is typically written in round parentheses, making
  478. the above form look like this:
  479.  
  480.      NAME(PARAM1, PARAM2, ...) = EXPRESSION;
  481.  
  482.    The `=' is replaced by `->' if NAME is a _global_ definition--that
  483. is, NAME can be called from a library client such as DDD.  A _local_
  484. definition (with `=') can be called only from other VSL functions.(1)
  485.  
  486. * Menu:
  487.  
  488. * VSL Function Parameters::
  489. * VSL Function Patterns::
  490. * VSL Declaring Functions::
  491. * VSL Redefining Functions::
  492. * VSL Replacing Functions::
  493. * VSL Overriding Functions::
  494.  
  495.    ---------- Footnotes ----------
  496.  
  497.    (1) The distinction into global and local definitions is useful when
  498. optimizing the library: local definitions that are unused within the
  499. library can be removed, while global definitions cannot.
  500.  
  501. 
  502. File: ddd-themes.info,  Node: VSL Function Parameters,  Next: VSL Function Patterns,  Up: VSL Function Definitions
  503.  
  504. Function Parameters
  505. -------------------
  506.  
  507.    The parameter list LIST may contain names of formal parameters.
  508. Upon a function call, these are bound to the actual arguments.
  509.  
  510.    If the function
  511.      sum(a, b) = a + b;
  512.    is called as
  513.      sum(2. 3)
  514.    then `a' will be bound to `2' and `b' will be bound to `3',
  515. evaluating to `5'.
  516.  
  517. * Menu:
  518.  
  519. * VSL Unused Parameters::
  520.  
  521. 
  522. File: ddd-themes.info,  Node: VSL Unused Parameters,  Up: VSL Function Parameters
  523.  
  524. VSL Unused Parameters
  525. .....................
  526.  
  527.    Unused parameters cause a warning, as in this example:
  528.  
  529.      first_arg(a, dummy) = a;        // Warning
  530.  
  531.    If a parameter has the name `_', it will not be bound to the actual
  532. argument (and can thus not be used).  Use `_' as parameter name for
  533. unused arguments:
  534.  
  535.      first_arg(a, _) = a;            // No warning
  536.  
  537.    `_' can be used multiple times in a parameter list.
  538.  
  539. 
  540. File: ddd-themes.info,  Node: VSL Function Patterns,  Next: VSL Declaring Functions,  Prev: VSL Function Parameters,  Up: VSL Function Definitions
  541.  
  542. Function Patterns
  543. -----------------
  544.  
  545.    A VSL function may have multiple definitions, each with a specific
  546. _pattern_.  The first definition whose pattern _matches_ the actual
  547. argument is used.
  548.  
  549.    What does `matching' mean?  Within a pattern,
  550.    * An ordinary formal parameter matches any single value
  551.  
  552.    * A formal parameter whose name is `...' or ends in `...' matches a
  553.      single value or a list or a list remainder
  554.  
  555.    * A constant matches exactly the same value
  556.  
  557.    * A composite box or list matches a composite box or list if
  558.         - the composites have the same type
  559.  
  560.         - the composites have the same number of elements
  561.  
  562.         - the elements match each other.
  563.  
  564.    Here are some examples.  The `num()' function (*note String
  565. Functions::) can take either one or two arguments.  The one-argument
  566. definition simply invokes the two-argument definition:
  567.  
  568.      num(a, base) = ...;
  569.      num(a) = num(a, 10);
  570.  
  571.    Here's another example: The `digit' function returns a string
  572. representation for a single number.  It has multiple definitions, all
  573. dependent on the actual argument:
  574.  
  575.      digit(0) = "0";
  576.      digit(1) = "1";
  577.      digit(2) = "2";
  578.      digit(3) = "3";
  579.      digit(4) = "4";
  580.      digit(5) = "5";
  581.      digit(6) = "6";
  582.      digit(7) = "7";
  583.      digit(8) = "8";
  584.      digit(9) = "9";
  585.      digit(10) = "a";
  586.      digit(11) = "b";
  587.      digit(12) = "c";
  588.      digit(13) = "d";
  589.      digit(14) = "e";
  590.      digit(15) = "f";
  591.      digit(_) = fail("invalid digit() argument");
  592.  
  593.    Formal parameters ending in `...' are useful for defining _aliases_
  594. of functions.  The definition
  595.      roman(...) = rm(...);
  596.    makes `roman' an alias of `rm'--any parameters (regardless how many)
  597. passed to `roman' will be passed to `rm'.
  598.  
  599.    Here's an example of how formal parameters ending in `...' can be
  600. used to realize _variadic functions_, taking any number of arguments
  601. (*note Maximum and Minimum Functions::):
  602.  
  603.      max(a) = a;
  604.      max(a, b, ...) = if a > b then max(a, ...) else max(b, ...) fi;
  605.      min(a) = a;
  606.      min(a, b, ...) = if a < b then min(a, ...) else min(b, ...) fi;
  607.  
  608. 
  609. File: ddd-themes.info,  Node: VSL Declaring Functions,  Next: VSL Redefining Functions,  Prev: VSL Function Patterns,  Up: VSL Function Definitions
  610.  
  611. Declaring Functions
  612. -------------------
  613.  
  614.    If you want to use a function before it has been defined, just write
  615. down its signature without specifying a body.  Here's an example:
  616.  
  617.      num(a, base);                   // declaration
  618.      num(a) = num(a, 10);
  619.  
  620.    Remember to give a definition later on, though.
  621.  
  622. 
  623. File: ddd-themes.info,  Node: VSL Redefining Functions,  Next: VSL Replacing Functions,  Prev: VSL Declaring Functions,  Up: VSL Function Definitions
  624.  
  625. Redefining Functions
  626. --------------------
  627.  
  628.    You can redefine a VSL function even _after_ its original
  629. definition.  You can
  630.    * _replace_ the original definition, thus making all previous
  631.      definitions refer to your new definition;
  632.  
  633.    * _override_ the original definition, thus making only later
  634.      definitions refer to your new definition.
  635.  
  636. 
  637. File: ddd-themes.info,  Node: VSL Replacing Functions,  Next: VSL Overriding Functions,  Prev: VSL Redefining Functions,  Up: VSL Function Definitions
  638.  
  639. Replacing Functions
  640. -------------------
  641.  
  642.    To remove an original definition, use
  643.  
  644.      #pragma replace NAME
  645.  
  646.    This removes all previous definitions of NAME.  Be sure to provide
  647. your own definitions, though.
  648.  
  649.    `#pragma replace' is typically used to change defaults:
  650.  
  651.      #include "fonts.vsl"            // defines stdfontsize()
  652.      
  653.      #pragma replace stdfontsize()   // replace def
  654.      stdfontsize() = 20;
  655.  
  656.    All existing function calls will now refer to the new definition.
  657.  
  658. 
  659. File: ddd-themes.info,  Node: VSL Overriding Functions,  Prev: VSL Replacing Functions,  Up: VSL Function Definitions
  660.  
  661. Overriding Functions
  662. --------------------
  663.  
  664.    To override an original definition, use
  665.  
  666.      #pragma override NAME
  667.  
  668.    This makes all later definitions use your new definition of NAME.
  669. Earlier definitions, however, still refer to the old definition.
  670.  
  671.    `#pragma override' is typically used if you want to redefine a
  672. function while still refering to the old definition:
  673.  
  674.      #include "fonts.vsl"            // defines stdfontsize()
  675.      
  676.      // Save old definition
  677.      old_stdfontsize() = stdfontsize();
  678.      
  679.      #pragma override stdfontsize()
  680.      
  681.      // Refer to old definition
  682.      stdfontsize() = old_stdfontsize() * 2;
  683.  
  684.    Since we used `#pragma override', we can use `old_stdfontsize()' to
  685. refer to the original definition of `stdfontsize()'.
  686.  
  687. 
  688. File: ddd-themes.info,  Node: VSL Includes,  Next: VSL Operators,  Prev: VSL Function Definitions,  Up: VSL Reference
  689.  
  690. Includes
  691. ========
  692.  
  693.    In a VSL file, you can include at any part the contents of another
  694. VSL file, using one of the special forms
  695.  
  696.      #include "FILE"
  697.      #include <FILE>
  698.  
  699.    The form `<FILE>' looks for VSL files in a number of standard
  700. directories; the form `"FILE"' first looks in the directory where the
  701. current file resides.
  702.  
  703.    Any included file is included only once.
  704.  
  705.    In DDD, you can set these places using the `vslPath' resource.
  706. *Note Customizing Display Appearance: (ddd)Customizing Display
  707. Appearance, for details.
  708.  
  709. 
  710. File: ddd-themes.info,  Node: VSL Operators,  Next: VSL Syntax Summary,  Prev: VSL Includes,  Up: VSL Reference
  711.  
  712. Operators
  713. =========
  714.  
  715.    VSL comes with a number of _inline operators,_ which can be used to
  716. compose boxes.  With raising precedence, these are:
  717.  
  718.      or
  719.      and
  720.      = <>
  721.      <= < >= >
  722.      ::
  723.      |
  724.      ^
  725.      ~
  726.      &
  727.      + -
  728.      * / %
  729.      not
  730.  
  731.    Except for `or' and `and', these operators are mapped to function
  732. calls.  Each invocation of an operator `@' in the form `A @ B' gets
  733. translated to a call of the VSL function with the special name `(@)'.
  734. This VSL function can be defined just like any other VSL function.
  735.  
  736.    For instance, the expression `A + B' gets translated to a function
  737. call `(+)(a, b)'; `A & B' invokes `(&)(a, b)'.
  738.  
  739.    In the file `builtin.vsl', you can actually find definitions of these
  740. functions:
  741.  
  742.      (&)(...) = __op_halign(...);
  743.      (+)(...) = __op_plus(...);
  744.  
  745.    The functions `__op_halign' and `__op_plus' are the names by which
  746. the `(&)' and `(+)' functions are implemented.  In this document,
  747. though, we will not look further at these internals.
  748.  
  749.    Here are the places where the operator functions are described:
  750.    * For `=' and `<>', *Note Comparison Functions::.
  751.  
  752.    * For `<=', `<', `>=', and `>', *Note Comparison Functions::.
  753.  
  754.    * For `::', *Note List Functions::.
  755.  
  756.    * For `|', `^', `~', and `&', *Note Composition Functions::.
  757.  
  758.    * For `+', `-', `*', `/', and `%', *Note Arithmetic Functions::.
  759.  
  760.    * For `not', *Note Negation Functions::.
  761.  
  762. 
  763. File: ddd-themes.info,  Node: VSL Syntax Summary,  Prev: VSL Operators,  Up: VSL Reference
  764.  
  765. Syntax Summary
  766. ==============
  767.  
  768.    The following file summarizes the syntax of VSL files.
  769.  
  770.      /*** VSL file ***/
  771.      
  772.      file                    :       item_list
  773.      
  774.      item_list               :       /* empty */
  775.                              |       item_list item
  776.      
  777.      item                    :       function_declaration ';'
  778.                              |       function_definition ';'
  779.                              |       override_declaration
  780.                              |       replace_declaration
  781.                              |       include_declaration
  782.                              |       line_declaration
  783.                              |       ';'
  784.                              |       error ';'
  785.      
  786.      /*** functions ***/
  787.      
  788.      function_declaration    :       function_header
  789.      
  790.      function_header         :       function_identifier function_argument
  791.                              |       function_identifier
  792.      
  793.      function_identifier     :       identifier
  794.                              |       '(' '==' ')'
  795.                              |       '(' '<>' ')'
  796.                              |       '(' '>' ')'
  797.                              |       '(' '>=' ')'
  798.                              |       '(' '<' ')'
  799.                              |       '(' '<=' ')'
  800.                              |       '(' '&' ')'
  801.                              |       '(' '|' ')'
  802.                              |       '(' '^' ')'
  803.                              |       '(' '~' ')'
  804.                              |       '(' '+' ')'
  805.                              |       '(' '-' ')'
  806.                              |       '(' '*' ')'
  807.                              |       '(' '/' ')'
  808.                              |       '(' '%' ')'
  809.                              |       '(' '::' ')'
  810.                              |       '(' 'not' ')'
  811.      
  812.      identifier              :       IDENTIFIER
  813.      
  814.      function_definition     :       local_definition
  815.                              |       global_definition
  816.      
  817.      local_definition        :       local_header function_body
  818.      
  819.      local_header            :       function_header '='
  820.      
  821.      global_definition       :       global_header function_body
  822.      
  823.      global_header           :       function_header '->'
  824.      
  825.      function_body           :       box_expression_with_defs
  826.      
  827.      
  828.      
  829.      /*** expressions ***/
  830.      
  831.      /*** let, where ***/
  832.      
  833.      box_expression_with_defs:       box_expression_with_wheres
  834.                              |       'let' var_definition in_box_expression
  835.      
  836.      in_box_expression       :       'in' box_expression_with_defs
  837.                              |       ',' var_definition in_box_expression
  838.      
  839.      box_expression_with_wheres:     box_expression
  840.                              |       box_expression_with_where
  841.      
  842.      box_expression_with_where:      box_expression_with_wheres
  843.                                      'where' var_definition
  844.                              |       box_expression_with_where
  845.                                      ',' var_definition
  846.      
  847.      var_definition          :       box_expression '=' box_expression
  848.      
  849.      
  850.      /*** basic expressions ***/
  851.      
  852.      box_expression          :       '(' box_expression_with_defs ')'
  853.                              |       list_expression
  854.                              |       const_expression
  855.                              |       binary_expression
  856.                              |       unary_expression
  857.                              |       cond_expression
  858.                              |       function_call
  859.                              |       argument_or_function
  860.      
  861.      list_expression         :       '[' ']'
  862.                              |       '[' box_expression_list ']'
  863.                              |       '(' ')'
  864.                              |       '(' multiple_box_expression_list ')'
  865.      
  866.      box_expression_list     :       box_expression_with_defs
  867.                              |       multiple_box_expression_list
  868.      
  869.      multiple_box_expression_list:   box_expression ':' box_expression
  870.                              |       box_expression ',' box_expression_list
  871.                              |       box_expression '...'
  872.                              |       '...'
  873.      
  874.      const_expression        :       string_constant
  875.                              |       numeric_constant
  876.      
  877.      string_constant         :       STRING
  878.                              |       string_constant STRING
  879.      
  880.      numeric_constant        :       INTEGER
  881.      
  882.      function_call           :       function_identifier function_argument
  883.      
  884.      unary_expression        :       'not' box_expression
  885.                              |       '+' box_expression
  886.                              |       '-' box_expression
  887.      
  888.      
  889.      /*** operators ***/
  890.      
  891.      binary_expression       :       box_expression '=' box_expression
  892.                              |       box_expression '<>' box_expression
  893.                              |       box_expression '>' box_expression
  894.                              |       box_expression '>=' box_expression
  895.                              |       box_expression '<' box_expression
  896.                              |       box_expression '<=' box_expression
  897.                              |       box_expression '&' box_expression
  898.                              |       box_expression '|' box_expression
  899.                              |       box_expression '^' box_expression
  900.                              |       box_expression '~' box_expression
  901.                              |       box_expression '+' box_expression
  902.                              |       box_expression '-' box_expression
  903.                              |       box_expression '*' box_expression
  904.                              |       box_expression '/' box_expression
  905.                              |       box_expression '%' box_expression
  906.                              |       box_expression '::' box_expression
  907.                              |       box_expression 'or' box_expression
  908.                              |       box_expression 'and' box_expression
  909.      
  910.      cond_expression         :       'if' box_expression
  911.                                      'then' box_expression_with_defs
  912.                                      else_expression
  913.                                      'fi'
  914.      
  915.      else_expression         :       'elsif' box_expression
  916.                                      'then' box_expression_with_defs
  917.                                      else_expression
  918.                              |       'else' box_expression_with_defs
  919.      
  920.      function_argument       :       list_expression
  921.                              |       '(' box_expression_with_defs ')'
  922.      
  923.      argument_or_function    :       identifier
  924.      
  925.      
  926.      /*** directives ***/
  927.      
  928.      override_declaration    :       '#pragma' 'override' override_list
  929.      
  930.      override_list           :       override_identifier
  931.                              |       override_list ',' override_identifier
  932.      
  933.      override_identifier     :       function_identifier
  934.      
  935.      replace_declaration     :       '#pragma' 'replace' replace_list
  936.      
  937.      replace_list            :       replace_identifier
  938.                              |       replace_list ',' replace_identifier
  939.      
  940.      replace_identifier      :       function_identifier
  941.      
  942.      include_declaration     :       '#include' '"' SIMPLE_STRING '"'
  943.                              |       '#include' '<' SIMPLE_STRING '>'
  944.      
  945.      line_declaration        :       '#line' INTEGER
  946.                              |       '#line' INTEGER STRING
  947.  
  948. 
  949. File: ddd-themes.info,  Node: Documentation License,  Next: Index,  Prev: VSL Reference,  Up: Top
  950.  
  951. GNU Free Documentation License
  952. ******************************
  953.  
  954.                         Version 1.1, March 2000
  955.  
  956.      Copyright (C) 2000  Free Software Foundation, Inc.
  957.      59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  958.      
  959.      Everyone is permitted to copy and distribute verbatim copies
  960.      of this license document, but changing it is not allowed.
  961.  
  962.  
  963.  
  964.   0. PREAMBLE
  965.  
  966.      The purpose of this License is to make a manual, textbook, or other
  967.      written document "free" in the sense of freedom: to assure everyone
  968.      the effective freedom to copy and redistribute it, with or without
  969.      modifying it, either commercially or noncommercially.  Secondarily,
  970.      this License preserves for the author and publisher a way to get
  971.      credit for their work, while not being considered responsible for
  972.      modifications made by others.
  973.  
  974.      This License is a kind of "copyleft", which means that derivative
  975.      works of the document must themselves be free in the same sense.
  976.      It complements the GNU General Public License, which is a copyleft
  977.      license designed for free software.
  978.  
  979.      We have designed this License in order to use it for manuals for
  980.      free software, because free software needs free documentation: a
  981.      free program should come with manuals providing the same freedoms
  982.      that the software does.  But this License is not limited to
  983.      software manuals; it can be used for any textual work, regardless
  984.      of subject matter or whether it is published as a printed book.
  985.      We recommend this License principally for works whose purpose is
  986.      instruction or reference.
  987.  
  988.  
  989.   1. APPLICABILITY AND DEFINITIONS
  990.  
  991.      This License applies to any manual or other work that contains a
  992.      notice placed by the copyright holder saying it can be distributed
  993.      under the terms of this License.  The "Document", below, refers to
  994.      any such manual or work.  Any member of the public is a licensee,
  995.      and is addressed as "you".
  996.  
  997.      A "Modified Version" of the Document means any work containing the
  998.      Document or a portion of it, either copied verbatim, or with
  999.      modifications and/or translated into another language.
  1000.  
  1001.      A "Secondary Section" is a named appendix or a front-matter
  1002.      section of the Document that deals exclusively with the
  1003.      relationship of the publishers or authors of the Document to the
  1004.      Document's overall subject (or to related matters) and contains
  1005.      nothing that could fall directly within that overall subject.
  1006.      (For example, if the Document is in part a textbook of
  1007.      mathematics, a Secondary Section may not explain any mathematics.)
  1008.      The relationship could be a matter of historical connection with
  1009.      the subject or with related matters, or of legal, commercial,
  1010.      philosophical, ethical or political position regarding them.
  1011.  
  1012.      The "Invariant Sections" are certain Secondary Sections whose
  1013.      titles are designated, as being those of Invariant Sections, in
  1014.      the notice that says that the Document is released under this
  1015.      License.
  1016.  
  1017.      The "Cover Texts" are certain short passages of text that are
  1018.      listed, as Front-Cover Texts or Back-Cover Texts, in the notice
  1019.      that says that the Document is released under this License.
  1020.  
  1021.      A "Transparent" copy of the Document means a machine-readable copy,
  1022.      represented in a format whose specification is available to the
  1023.      general public, whose contents can be viewed and edited directly
  1024.      and straightforwardly with generic text editors or (for images
  1025.      composed of pixels) generic paint programs or (for drawings) some
  1026.      widely available drawing editor, and that is suitable for input to
  1027.      text formatters or for automatic translation to a variety of
  1028.      formats suitable for input to text formatters.  A copy made in an
  1029.      otherwise Transparent file format whose markup has been designed
  1030.      to thwart or discourage subsequent modification by readers is not
  1031.      Transparent.  A copy that is not "Transparent" is called "Opaque".
  1032.  
  1033.      Examples of suitable formats for Transparent copies include plain
  1034.      ASCII without markup, Texinfo input format, LaTeX input format,
  1035.      SGML or XML using a publicly available DTD, and
  1036.      standard-conforming simple HTML designed for human modification.
  1037.      Opaque formats include PostScript, PDF, proprietary formats that
  1038.      can be read and edited only by proprietary word processors, SGML
  1039.      or XML for which the DTD and/or processing tools are not generally
  1040.      available, and the machine-generated HTML produced by some word
  1041.      processors for output purposes only.
  1042.  
  1043.      The "Title Page" means, for a printed book, the title page itself,
  1044.      plus such following pages as are needed to hold, legibly, the
  1045.      material this License requires to appear in the title page.  For
  1046.      works in formats which do not have any title page as such, "Title
  1047.      Page" means the text near the most prominent appearance of the
  1048.      work's title, preceding the beginning of the body of the text.
  1049.  
  1050.  
  1051.   2. VERBATIM COPYING
  1052.  
  1053.      You may copy and distribute the Document in any medium, either
  1054.      commercially or noncommercially, provided that this License, the
  1055.      copyright notices, and the license notice saying this License
  1056.      applies to the Document are reproduced in all copies, and that you
  1057.      add no other conditions whatsoever to those of this License.  You
  1058.      may not use technical measures to obstruct or control the reading
  1059.      or further copying of the copies you make or distribute.  However,
  1060.      you may accept compensation in exchange for copies.  If you
  1061.      distribute a large enough number of copies you must also follow
  1062.      the conditions in section 3.
  1063.  
  1064.      You may also lend copies, under the same conditions stated above,
  1065.      and you may publicly display copies.
  1066.  
  1067.  
  1068.   3. COPYING IN QUANTITY
  1069.  
  1070.      If you publish printed copies of the Document numbering more than
  1071.      100, and the Document's license notice requires Cover Texts, you
  1072.      must enclose the copies in covers that carry, clearly and legibly,
  1073.      all these Cover Texts: Front-Cover Texts on the front cover, and
  1074.      Back-Cover Texts on the back cover.  Both covers must also clearly
  1075.      and legibly identify you as the publisher of these copies.  The
  1076.      front cover must present the full title with all words of the
  1077.      title equally prominent and visible.  You may add other material
  1078.      on the covers in addition.  Copying with changes limited to the
  1079.      covers, as long as they preserve the title of the Document and
  1080.      satisfy these conditions, can be treated as verbatim copying in
  1081.      other respects.
  1082.  
  1083.      If the required texts for either cover are too voluminous to fit
  1084.      legibly, you should put the first ones listed (as many as fit
  1085.      reasonably) on the actual cover, and continue the rest onto
  1086.      adjacent pages.
  1087.  
  1088.      If you publish or distribute Opaque copies of the Document
  1089.      numbering more than 100, you must either include a
  1090.      machine-readable Transparent copy along with each Opaque copy, or
  1091.      state in or with each Opaque copy a publicly-accessible
  1092.      computer-network location containing a complete Transparent copy
  1093.      of the Document, free of added material, which the general
  1094.      network-using public has access to download anonymously at no
  1095.      charge using public-standard network protocols.  If you use the
  1096.      latter option, you must take reasonably prudent steps, when you
  1097.      begin distribution of Opaque copies in quantity, to ensure that
  1098.      this Transparent copy will remain thus accessible at the stated
  1099.      location until at least one year after the last time you
  1100.      distribute an Opaque copy (directly or through your agents or
  1101.      retailers) of that edition to the public.
  1102.  
  1103.      It is requested, but not required, that you contact the authors of
  1104.      the Document well before redistributing any large number of
  1105.      copies, to give them a chance to provide you with an updated
  1106.      version of the Document.
  1107.  
  1108.  
  1109.   4. MODIFICATIONS
  1110.  
  1111.      You may copy and distribute a Modified Version of the Document
  1112.      under the conditions of sections 2 and 3 above, provided that you
  1113.      release the Modified Version under precisely this License, with
  1114.      the Modified Version filling the role of the Document, thus
  1115.      licensing distribution and modification of the Modified Version to
  1116.      whoever possesses a copy of it.  In addition, you must do these
  1117.      things in the Modified Version:
  1118.  
  1119.      A. Use in the Title Page (and on the covers, if any) a title
  1120.      distinct    from that of the Document, and from those of previous
  1121.      versions    (which should, if there were any, be listed in the
  1122.      History section    of the Document).  You may use the same title
  1123.      as a previous version    if the original publisher of that version
  1124.      gives permission.
  1125.      B. List on the Title Page, as authors, one or more persons or
  1126.      entities    responsible for authorship of the modifications in the
  1127.      Modified    Version, together with at least five of the principal
  1128.      authors of the    Document (all of its principal authors, if it
  1129.      has less than five).
  1130.      C. State on the Title page the name of the publisher of the
  1131.      Modified Version, as the publisher.
  1132.      D. Preserve all the copyright notices of the Document.
  1133.      E. Add an appropriate copyright notice for your modifications
  1134.      adjacent to the other copyright notices.
  1135.      F. Include, immediately after the copyright notices, a license
  1136.      notice    giving the public permission to use the Modified Version
  1137.      under the    terms of this License, in the form shown in the
  1138.      Addendum below.
  1139.      G. Preserve in that license notice the full lists of Invariant
  1140.      Sections    and required Cover Texts given in the Document's
  1141.      license notice.
  1142.      H. Include an unaltered copy of this License.
  1143.      I. Preserve the section entitled "History", and its title, and add
  1144.      to    it an item stating at least the title, year, new authors, and
  1145.        publisher of the Modified Version as given on the Title Page.
  1146.      If    there is no section entitled "History" in the Document,
  1147.      create one    stating the title, year, authors, and publisher of
  1148.      the Document as    given on its Title Page, then add an item
  1149.      describing the Modified    Version as stated in the previous
  1150.      sentence.
  1151.      J. Preserve the network location, if any, given in the Document for
  1152.        public access to a Transparent copy of the Document, and
  1153.      likewise    the network locations given in the Document for
  1154.      previous versions    it was based on.  These may be placed in the
  1155.      "History" section.     You may omit a network location for a work
  1156.      that was published at    least four years before the Document
  1157.      itself, or if the original    publisher of the version it refers
  1158.      to gives permission.
  1159.      K. In any section entitled "Acknowledgements" or "Dedications",
  1160.      preserve the section's title, and preserve in the section all the
  1161.       substance and tone of each of the contributor acknowledgements
  1162.      and/or dedications given therein.
  1163.      L. Preserve all the Invariant Sections of the Document,
  1164.      unaltered in their text and in their titles.  Section numbers
  1165.      or the equivalent are not considered part of the section titles.
  1166.      M. Delete any section entitled "Endorsements".  Such a section
  1167.      may not be included in the Modified Version.
  1168.      N. Do not retitle any existing section as "Endorsements"    or to
  1169.      conflict in title with any Invariant Section.
  1170.  
  1171.      If the Modified Version includes new front-matter sections or
  1172.      appendices that qualify as Secondary Sections and contain no
  1173.      material copied from the Document, you may at your option
  1174.      designate some or all of these sections as invariant.  To do this,
  1175.      add their titles to the list of Invariant Sections in the Modified
  1176.      Version's license notice.  These titles must be distinct from any
  1177.      other section titles.
  1178.  
  1179.      You may add a section entitled "Endorsements", provided it contains
  1180.      nothing but endorsements of your Modified Version by various
  1181.      parties-for example, statements of peer review or that the text has
  1182.      been approved by an organization as the authoritative definition
  1183.      of a standard.
  1184.  
  1185.      You may add a passage of up to five words as a Front-Cover Text,
  1186.      and a passage of up to 25 words as a Back-Cover Text, to the end
  1187.      of the list of Cover Texts in the Modified Version.  Only one
  1188.      passage of Front-Cover Text and one of Back-Cover Text may be
  1189.      added by (or through arrangements made by) any one entity.  If the
  1190.      Document already includes a cover text for the same cover,
  1191.      previously added by you or by arrangement made by the same entity
  1192.      you are acting on behalf of, you may not add another; but you may
  1193.      replace the old one, on explicit permission from the previous
  1194.      publisher that added the old one.
  1195.  
  1196.      The author(s) and publisher(s) of the Document do not by this
  1197.      License give permission to use their names for publicity for or to
  1198.      assert or imply endorsement of any Modified Version.
  1199.  
  1200.  
  1201.   5. COMBINING DOCUMENTS
  1202.  
  1203.      You may combine the Document with other documents released under
  1204.      this License, under the terms defined in section 4 above for
  1205.      modified versions, provided that you include in the combination
  1206.      all of the Invariant Sections of all of the original documents,
  1207.      unmodified, and list them all as Invariant Sections of your
  1208.      combined work in its license notice.
  1209.  
  1210.      The combined work need only contain one copy of this License, and
  1211.      multiple identical Invariant Sections may be replaced with a single
  1212.      copy.  If there are multiple Invariant Sections with the same name
  1213.      but different contents, make the title of each such section unique
  1214.      by adding at the end of it, in parentheses, the name of the
  1215.      original author or publisher of that section if known, or else a
  1216.      unique number.  Make the same adjustment to the section titles in
  1217.      the list of Invariant Sections in the license notice of the
  1218.      combined work.
  1219.  
  1220.      In the combination, you must combine any sections entitled
  1221.      "History" in the various original documents, forming one section
  1222.      entitled "History"; likewise combine any sections entitled
  1223.      "Acknowledgements", and any sections entitled "Dedications".  You
  1224.      must delete all sections entitled "Endorsements."
  1225.  
  1226.  
  1227.   6. COLLECTIONS OF DOCUMENTS
  1228.  
  1229.      You may make a collection consisting of the Document and other
  1230.      documents released under this License, and replace the individual
  1231.      copies of this License in the various documents with a single copy
  1232.      that is included in the collection, provided that you follow the
  1233.      rules of this License for verbatim copying of each of the
  1234.      documents in all other respects.
  1235.  
  1236.      You may extract a single document from such a collection, and
  1237.      distribute it individually under this License, provided you insert
  1238.      a copy of this License into the extracted document, and follow
  1239.      this License in all other respects regarding verbatim copying of
  1240.      that document.
  1241.  
  1242.  
  1243.   7. AGGREGATION WITH INDEPENDENT WORKS
  1244.  
  1245.      A compilation of the Document or its derivatives with other
  1246.      separate and independent documents or works, in or on a volume of
  1247.      a storage or distribution medium, does not as a whole count as a
  1248.      Modified Version of the Document, provided no compilation
  1249.      copyright is claimed for the compilation.  Such a compilation is
  1250.      called an "aggregate", and this License does not apply to the
  1251.      other self-contained works thus compiled with the Document, on
  1252.      account of their being thus compiled, if they are not themselves
  1253.      derivative works of the Document.
  1254.  
  1255.      If the Cover Text requirement of section 3 is applicable to these
  1256.      copies of the Document, then if the Document is less than one
  1257.      quarter of the entire aggregate, the Document's Cover Texts may be
  1258.      placed on covers that surround only the Document within the
  1259.      aggregate.  Otherwise they must appear on covers around the whole
  1260.      aggregate.
  1261.  
  1262.  
  1263.   8. TRANSLATION
  1264.  
  1265.      Translation is considered a kind of modification, so you may
  1266.      distribute translations of the Document under the terms of section
  1267.      4.  Replacing Invariant Sections with translations requires special
  1268.      permission from their copyright holders, but you may include
  1269.      translations of some or all Invariant Sections in addition to the
  1270.      original versions of these Invariant Sections.  You may include a
  1271.      translation of this License provided that you also include the
  1272.      original English version of this License.  In case of a
  1273.      disagreement between the translation and the original English
  1274.      version of this License, the original English version will prevail.
  1275.  
  1276.  
  1277.   9. TERMINATION
  1278.  
  1279.      You may not copy, modify, sublicense, or distribute the Document
  1280.      except as expressly provided for under this License.  Any other
  1281.      attempt to copy, modify, sublicense or distribute the Document is
  1282.      void, and will automatically terminate your rights under this
  1283.      License.  However, parties who have received copies, or rights,
  1284.      from you under this License will not have their licenses
  1285.      terminated so long as such parties remain in full compliance.
  1286.  
  1287.  
  1288.  10. FUTURE REVISIONS OF THIS LICENSE
  1289.  
  1290.      The Free Software Foundation may publish new, revised versions of
  1291.      the GNU Free Documentation License from time to time.  Such new
  1292.      versions will be similar in spirit to the present version, but may
  1293.      differ in detail to address new problems or concerns.  See
  1294.      http://www.gnu.org/copyleft/.
  1295.  
  1296.      Each version of the License is given a distinguishing version
  1297.      number.  If the Document specifies that a particular numbered
  1298.      version of this License "or any later version" applies to it, you
  1299.      have the option of following the terms and conditions either of
  1300.      that specified version or of any later version that has been
  1301.      published (not as a draft) by the Free Software Foundation.  If
  1302.      the Document does not specify a version number of this License,
  1303.      you may choose any version ever published (not as a draft) by the
  1304.      Free Software Foundation.
  1305.  
  1306.  
  1307. ADDENDUM: How to use this License for your documents
  1308. ====================================================
  1309.  
  1310.    To use this License in a document you have written, include a copy of
  1311. the License in the document and put the following copyright and license
  1312. notices just after the title page:
  1313.  
  1314.  
  1315.        Copyright (C)  YEAR  YOUR NAME.
  1316.        Permission is granted to copy, distribute and/or modify this document
  1317.        under the terms of the GNU Free Documentation License, Version 1.1
  1318.        or any later version published by the Free Software Foundation;
  1319.        with the Invariant Sections being LIST THEIR TITLES, with the
  1320.        Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
  1321.        A copy of the license is included in the section entitled ``GNU
  1322.        Free Documentation License''.
  1323. If you have no Invariant Sections, write "with no Invariant
  1324. Sections" instead of saying which ones are invariant.  If you have no
  1325. Front-Cover Texts, write "no Front-Cover Texts" instead of "Front-Cover
  1326. Texts being LIST"; likewise for Back-Cover Texts.
  1327.  
  1328.    If your document contains nontrivial examples of program code, we
  1329. recommend releasing these examples in parallel under your choice of
  1330. free software license, such as the GNU General Public License, to
  1331. permit their use in free software.
  1332.  
  1333.